{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "d8fdb577",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import math\n",
    "from tqdm import tqdm\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "format_data = {\n",
    "        \"device_id\":[],\n",
    "        \"cpu_id\":[],\n",
    "        \"record_id\":[],\n",
    "        \"timestamp\":[],\n",
    "        \"process_id\":[],\n",
    "        \"trace_action\":[],\n",
    "        \"operation_type\":[], #N操作的时候，没有扇区num，没有IOsize，只有进程name\n",
    "        \"sector_num\":[],\n",
    "        \"IO_size\":[],\n",
    "        \"process_name\":[]\n",
    "    }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "761f0925",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(19335544, 1)\n",
      "                                                   0\n",
      "0  259,2   18  1901846   944.381164390  4080  I  ...\n",
      "1  259,2   18  1901847   944.381164460  4080  I  ...\n",
      "2  259,2   18  1901848   944.381164531  4080  I  ...\n",
      "3  259,2   18  1901849   944.381164601  4080  I  ...\n",
      "4  259,2   18  1901850   944.381164671  4080  I  ...\n"
     ]
    }
   ],
   "source": [
    "def get_data():\n",
    "    data = pd.read_csv('../data_set/map-4.csv',delimiter ='\\t',header=None)\n",
    "    #data = pd.read_csv('../data_set/ssdtrace-sample',delimiter ='\\t',header=None)\n",
    "    return data   \n",
    "data = get_data()\n",
    "print(data.shape)\n",
    "print(data.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6e97156b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|███████████████████████████████████████████████████████████████████| 19335544/19335544 [03:30<00:00, 91754.88it/s]\n"
     ]
    }
   ],
   "source": [
    "def get_format_data(data):\n",
    "    global error_data\n",
    "    all_data = []\n",
    "    error_data = []\n",
    "    for line in tqdm(data[0]):\n",
    "        lst = line.split(' ')\n",
    "        true_data = []\n",
    "        for i in lst:\n",
    "            if len(i)>0 :\n",
    "                #print(i)\n",
    "                true_data.append(i)\n",
    "        if len(true_data)>6:\n",
    "            all_data.append(true_data)\n",
    "        else:\n",
    "            error_data.append(true_data)\n",
    "    return all_data\n",
    "lst_data = get_format_data(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "508ce2b3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "19335544\n",
      "19335544\n",
      "19335544\n",
      "19335544\n",
      "19335544\n",
      "19335544\n",
      "19335544\n",
      "19335544\n",
      "19335544\n",
      "19335544\n"
     ]
    }
   ],
   "source": [
    "\n",
    "for lst in lst_data:\n",
    "\n",
    "    if lst[6]!='N' and lst[6]!=\"FWS\" and lst[6]!=\"WFS\" and  lst[6]!=\"WS\":#不是这个分支\n",
    "        format_data[\"device_id\"].append(lst[0])\n",
    "        format_data[\"cpu_id\"].append(lst[1])\n",
    "        format_data[\"record_id\"].append(lst[2])\n",
    "        format_data[\"timestamp\"].append(lst[3])\n",
    "        format_data[\"process_id\"].append(lst[4])\n",
    "        format_data[\"trace_action\"].append(lst[5])\n",
    "        format_data[\"operation_type\"].append(lst[6])\n",
    "        format_data[\"sector_num\"].append(lst[7])\n",
    "        format_data[\"IO_size\"].append(lst[9])\n",
    "        format_data[\"process_name\"].append(lst[-1])\n",
    "\n",
    "    else:\n",
    "        if lst[6]=='N':#不是这个分支\n",
    "            format_data[\"device_id\"].append(lst[0])\n",
    "            format_data[\"cpu_id\"].append(lst[1])\n",
    "            format_data[\"record_id\"].append(lst[2])\n",
    "            format_data[\"timestamp\"].append(lst[3])\n",
    "            format_data[\"process_id\"].append(lst[4])\n",
    "            format_data[\"trace_action\"].append(lst[5])\n",
    "            format_data[\"operation_type\"].append(lst[6]) #N\n",
    "            format_data[\"sector_num\"].append(0)\n",
    "            format_data[\"IO_size\"].append(0)\n",
    "            format_data[\"process_name\"].append(lst[-1])\n",
    "        elif lst[6]==\"WFS\": #不是这个分支\n",
    "            \n",
    "            if lst[8]!=\"+\":\n",
    "            #['259,2', '19', '3996', '7.120903570', '0', 'C', 'WFS', '499613064', '[0]']\n",
    "                format_data[\"device_id\"].append(lst[0])\n",
    "                format_data[\"cpu_id\"].append(lst[1])\n",
    "                format_data[\"record_id\"].append(lst[2])\n",
    "                format_data[\"timestamp\"].append(lst[3])\n",
    "                format_data[\"process_id\"].append(lst[4])\n",
    "                format_data[\"trace_action\"].append(lst[5])\n",
    "                format_data[\"operation_type\"].append(lst[6]) \n",
    "                format_data[\"sector_num\"].append(lst[7])\n",
    "                format_data[\"IO_size\"].append(0)\n",
    "                format_data[\"process_name\"].append(lst[-1])\n",
    "            else:\n",
    "                #['259,2', '1', '13708', '27.635742637', '1062', 'D', 'WFS', '499617592', '+', '8', '[kworker/1:1H]']\n",
    "                #['259,2', '1', '13710', '27.639087693', '4053', 'C', 'WFS', '499617592', '+', '8', '[0]']\n",
    "                format_data[\"device_id\"].append(lst[0])\n",
    "                format_data[\"cpu_id\"].append(lst[1])\n",
    "                format_data[\"record_id\"].append(lst[2])\n",
    "                format_data[\"timestamp\"].append(lst[3])\n",
    "                format_data[\"process_id\"].append(lst[4])\n",
    "                format_data[\"trace_action\"].append(lst[5])\n",
    "                format_data[\"operation_type\"].append(lst[6])\n",
    "                format_data[\"sector_num\"].append(lst[7])\n",
    "                format_data[\"IO_size\"].append(lst[9])\n",
    "                format_data[\"process_name\"].append(lst[-1])\n",
    "        elif lst[6]==\"WS\":#不是这个分支\n",
    "            if lst[-1]==\"[0]\":\n",
    "            #['259,2', '1', '64942', '132.546605808', '4086', 'C', 'WS', '0', '[0]']\n",
    "                format_data[\"device_id\"].append(lst[0])\n",
    "                format_data[\"cpu_id\"].append(lst[1])\n",
    "                format_data[\"record_id\"].append(lst[2])\n",
    "                format_data[\"timestamp\"].append(lst[3])\n",
    "                format_data[\"process_id\"].append(lst[4])\n",
    "                format_data[\"trace_action\"].append(lst[5])\n",
    "                format_data[\"operation_type\"].append(lst[6]) \n",
    "                format_data[\"sector_num\"].append(0) #用不到\n",
    "                format_data[\"IO_size\"].append(0)\n",
    "                format_data[\"process_name\"].append(lst[-1])\n",
    "            else: \n",
    "                format_data[\"device_id\"].append(lst[0])\n",
    "                format_data[\"cpu_id\"].append(lst[1])\n",
    "                format_data[\"record_id\"].append(lst[2])\n",
    "                format_data[\"timestamp\"].append(lst[3])\n",
    "                format_data[\"process_id\"].append(lst[4])\n",
    "                format_data[\"trace_action\"].append(lst[5])\n",
    "                format_data[\"operation_type\"].append(lst[6])\n",
    "                format_data[\"sector_num\"].append(lst[7])\n",
    "                format_data[\"IO_size\"].append(lst[9])\n",
    "                format_data[\"process_name\"].append(lst[-1])\n",
    "            #['259,2', '2', '2638', '1.641824430', '4020', 'Q', 'WS', '7487488', '+', '2048', '[java]']\n",
    "        elif lst[6]==\"FWS\":\n",
    "            #['259,2', '1', '64940', '132.545984928', '4092', 'Q', 'FWS', '[rocksdb:bg0]']\n",
    "            format_data[\"device_id\"].append(lst[0])\n",
    "            format_data[\"cpu_id\"].append(lst[1])\n",
    "            format_data[\"record_id\"].append(lst[2])\n",
    "            format_data[\"timestamp\"].append(lst[3])\n",
    "            format_data[\"process_id\"].append(lst[4])\n",
    "            format_data[\"trace_action\"].append(lst[5])\n",
    "            format_data[\"operation_type\"].append(lst[6]) \n",
    "            format_data[\"sector_num\"].append(0) #用不到\n",
    "            format_data[\"IO_size\"].append(0)#用不到\n",
    "            format_data[\"process_name\"].append(lst[-1])\n",
    "            \n",
    "\n",
    "\n",
    "print(len(format_data[\"device_id\"]))\n",
    "print(len(format_data[\"cpu_id\"]))\n",
    "print(len(format_data[\"record_id\"]))\n",
    "print(len(format_data[\"timestamp\"]))\n",
    "print(len(format_data[\"process_id\"]))\n",
    "print(len(format_data[\"trace_action\"]))\n",
    "print(len(format_data[\"operation_type\"]))\n",
    "print(len(format_data[\"sector_num\"]))\n",
    "print(len(format_data[\"IO_size\"]))\n",
    "print(len(format_data[\"process_name\"]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "cf188530",
   "metadata": {},
   "outputs": [],
   "source": [
    "                \n",
    "column_name = [ \"device_id\",\n",
    " \"cpu_id\",\n",
    " \"record_id\",\n",
    " \"timestamp\",\n",
    " \"process_id\",\n",
    " \"trace_action\",\n",
    " \"operation_type\",\n",
    " \"sector_num\",\n",
    " \"IO_size\",\n",
    " \"process_name\"]\n",
    "data = pd.DataFrame(format_data,columns=column_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "be2cb67d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "19335544"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "load3_request_num = data.shape[0]\n",
    "load3_request_num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5823dfcd",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████| 19335544/19335544 [00:11<00:00, 1682780.43it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "944.38116439 <class 'float'>\n",
      "944.38116439\n",
      "1227.615206702\n"
     ]
    }
   ],
   "source": [
    "lst = [float(i) for i in tqdm(data[\"timestamp\"])]\n",
    "print(lst[0],type(lst[0]))\n",
    "print(min(lst))\n",
    "print(max(lst))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4b623777",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████| 19335544/19335544 [01:55<00:00, 167863.59it/s]\n",
      "100%|██████████████████████████████████████████████████████████████████| 19335544/19335544 [01:44<00:00, 185519.11it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最大时间数是: 1228\n",
      "最小时间数是: 944\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|███████████████████████████████████████████████████████████████████████████████| 29/29 [1:00:33<00:00, 125.30s/it]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'request_amount')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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rOS+++6jurqa66+/np07d9La2sq7777Lz372M1avXs0TTzxBXV0djz32GB6Ph2effZZrr72WQCDAiSeeyM0330xeXl6oztuMGTNYu3Yt1157Lc8//zzXX389u3btYseOHezatYsvf/nLfPGLX+Qb3/gG27dvZ/HixZx++un85Cc/ifoZaTSJEAwawaX15d40z2R6ojUYm+kZCmD+Zgkq43872LJlC5/61Kf40Y9+xJ49e1izZg3r169n3bp1vPii0bb9jjvuYN26daxdu5abbroJn89Ha2sr3/72t3n55Zd5+umn2bx5c9TjvO9972P16tW88cYbXHzxxfz4xz8OLdu+fTuPP/44jzzyCJ/4xCc49dRT2bRpE16vl8cff5yhoSEuv/xyHnzwQTZt2kQgEODmm2+e8tzeeecdnnzySdasWcN3vvMdRkZG+OEPf8jhhx/O+vXrtXDROIav3w9A98BImmcyPdEaTBxMpWmAYR77+G2rGQkE8eS4+N+L7VG958yZw4oVK7j22mt56qmnOP744wHo6+tj69atnHzyydx000386U9/AmD37t1s3bqVffv2ccopp2Dl+Fx00UW8++67EY/T0tLCRRddRGtrK36//6AkxrPOOguPx8Oxxx7L6OgoZ555JgDHHnssTU1NbNmyhblz53LEEUcAcNlll/GrX/2KL3/5y1HP7cMf/jB5eXnk5eVRVVVFW1tbwp+TRhMPnaaA6RrUAsYJtICxmSVzyrnvyhWs3uFjxWGVttl1CwsLAcMHc9111/HZz372oOXPP/88zzzzDK+++ioFBQWccsopoSTEePJF/vVf/5WvfvWrnHPOOSETloVlWnO5XHg8ntB+XS4XgUCAaN1Rc3JyQr6j8cmR4SY7t9tNIGCP1qfRRGNoZJR+/ygAXVqDcQRtInOAJXPKuebUeY44Dc844wzuuOMO+vr6ANizZw/t7e10d3dTXl5OQUEB77zzDqtXrwZg+fLlPP/88/h8PkZGRvj9738fdf/d3d3U1RlVde6+++645nbUUUfR1NTEtm3bALj33nt5//vfDxi9dtatWwfAH/4wabDgQRQXF9Pb2xvX8TWaeOgc8Ifedw36o6ypSRQtYLKMVatWcemll3LSSSdx7LHHcsEFF9Db28uZZ55JIBBg0aJF/Od//icrVqwAoKamhuuvv56TTjqJD37wg5xwwglR93/99ddz4YUXsnLlSmbMmBHX3PLz87nzzju58MILOfbYY3G5XFx99dUAfPvb3+ZLX/oSK1euxO12T7mvyspK3vve93LMMcfw9a9/Pa55aDSx0NE/JlS0D8YZJJpZ41Bj6dKlanxHy7fffpsFCxakaUaaqdDfjyZRXtq6n0/evgaAi5Y28KMLFqV5RtmLiKxTSi0dP641GI1Gc0hiaTC5bpc2kTmEdvIfotxwww0T/DEXXngh3/zmN9M0I40mtVgRZHMqC7ST3yG0gDlE+eY3v6mFieaQpqPfjwjMqSykpXMg3dOZlmgTmUajOSTpGPBT5vVQWZirNRiH0AJGo9EcknT0+ykvzKWswKN9MA6hBYxGozkk6ej3U1mYS2mBh6GRIEMjo+me0rRDCxiNRnNI0tk/QnlBLmXeXAC6dbkY29ECZppx5ZVXhgpafv/730/zbJLn+eef55VXXkn3NDTTEF+/n8oiw0QGulyME2gB4wS718BLPzX+ppDR0VFuu+02Fi5cCGgBo9FEQilF54Df1GAsAaP9MHajw5Tj4YlvwL5N0dcZ7oG2N0EFQVxQfQzklURef9axcNYPIy7+8Y9/TH5+Pl/84hf5yle+woYNG/j73//Os88+y5133smf//xnvvrVr/Lkk0/y05/+lG9961vceOONPPzwwwwODrJ48WKOPvpo7rvvPn77299y00034ff7Wb58Ob/+9a8jlm353Oc+x+uvv87g4CAXXHBBqOdMY2Mjl156Kc899xwjIyPceuutXHfddWzbto2vf/3rXH311Sil+Ld/+zeeeOIJRIRvfetbXHTRRTz//PPceOON/OUvfwHgC1/4AkuXLuXyyy+nsbGRyy67jMceeyxUMy0/P59bbrkFt9vNb3/7W37xi1+wcuXK6J+/RhMDPUMBRoOKCtMHA7qishNoDcZuhroN4QLG36HupHZ38skn89JLLwGwdu1a+vr6GBkZ4R//+AcrV66kv7+fY445htdee433ve99oe1++MMf4vV6Wb9+Pffddx9vv/02Dz74IC+//DLr16/H7XZz3333RTzuDTfcwNq1a9m4cSMvvPACGzduDC1raGjg1VdfZeXKlVx++eU8/PDDrF69mv/6r/8C4I9//CPr169nw4YNPPPMM3z961+ntbV1ynOdMWMG//znP/nc5z7HjTfeSGNjI1dffTVf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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "def cnt_r_1s(beginS,deltaSecond=1):#以1s为单位  beginS 应该是float   计算[beginS,beginS+deltaSecond] 时间段内的读请求数目\n",
    "#     beginS = eval(beginS)\n",
    "    read_data = data[data[\"operation_type\"]==\"R\"]  \n",
    "    syn_read_data =  data[data[\"operation_type\"]==\"RS\"]\n",
    "    ahead_read_data  = data[data[\"operation_type\"]==\"A\"]#预读也算\n",
    "    cnt = 0\n",
    "    for occur_time in read_data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是deltaSecond = 1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    for occur_time in syn_read_data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    for occur_time in ahead_read_data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    return cnt\n",
    "                \n",
    "def cnt_w_1s(beginS,deltaSecond=1):\n",
    "#     beginS = eval(beginS) \n",
    "    write_data = data[data[\"operation_type\"]==\"W\"]  \n",
    "    cnt = 0\n",
    "    for occur_time in write_data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    return cnt\n",
    "\n",
    "def getMaxTime(timestamp_lst):\n",
    "    #传入的是整个数据的timestamp列\n",
    "    lst = []\n",
    "    for i in tqdm(timestamp_lst):\n",
    "        lst.append(eval(i))\n",
    "    return max(lst)\n",
    "\n",
    "def getMinTime(timestamp_lst):\n",
    "    lst = []\n",
    "    for i in tqdm(timestamp_lst):\n",
    "        lst.append(eval(i))\n",
    "    return min(lst)\n",
    "\n",
    "\n",
    "#随时间的变化图  要求per second  所以是1s\n",
    "def generate_time_Xaxis(deltaSecond=1): #interval:区间的个数\n",
    "    endS = math.ceil(getMaxTime(data[\"timestamp\"])) #endSecond (已向上取整)\n",
    "    beginS = int(getMinTime(data[\"timestamp\"]))\n",
    "    print(\"最大时间数是:\",endS)\n",
    "    print(\"最小时间数是:\",beginS)\n",
    "    X_axis = [i for i in range(beginS,endS+1,deltaSecond)]\n",
    "    #print(\"X_axis\",X_axis)\n",
    "    return X_axis\n",
    "def generate_y_axis(x_axis):\n",
    "    y_axis = []\n",
    "    global read_cnt\n",
    "    global write_cnt\n",
    "    read_cnt = []  #每秒的read请求个数\n",
    "    write_cnt = [] #每秒的write请求个数\n",
    "    from tqdm import tqdm\n",
    "    for i in tqdm(range(len(x_axis))):\n",
    "        read_cnt.append(cnt_r_1s(x_axis[i]))\n",
    "        write_cnt.append(cnt_w_1s(x_axis[i]))\n",
    "\n",
    "    \n",
    "\n",
    "x_axis = generate_time_Xaxis(10) #本负载均可使用此x轴(per second)\n",
    "generate_y_axis(x_axis) #根据x对应的时间生成\n",
    "\n",
    "plt.plot(x_axis, read_cnt, marker='o', markersize=3)  # 绘制折线图，添加数据点，设置点的大小\n",
    "plt.plot(x_axis, write_cnt, marker='o', markersize=3)\n",
    "plt.legend(['read_amount', 'write_amount'])  # 设置折线名称\n",
    "plt.title(\"numbers of read and write request per second\")\n",
    "plt.xlabel(\"time_stamp\")\n",
    "plt.ylabel(\"request_amount\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3917bfce",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "d9e9dda7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "读请求数: 1688665\n",
      "写请求数: 5\n",
      "读写请求比例为: 337733.0\n"
     ]
    }
   ],
   "source": [
    "r = sum(read_cnt)\n",
    "w = sum(write_cnt)\n",
    "print(\"读请求数:\",r)\n",
    "print(\"写请求数:\",w)\n",
    "if sum(write_cnt)!=0:\n",
    "    read_write_ratio = r/w\n",
    "else:\n",
    "    read_write_ratio = \"no write request\"\n",
    "print(\"读写请求比例为:\",read_write_ratio)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "4e17e63b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████| 19335544/19335544 [02:46<00:00, 116301.66it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "平均IOPS： 15750.492413616415\n"
     ]
    }
   ],
   "source": [
    "# 任务 3 ：计算平均IOPS\n",
    "AVG_IOPS = load3_request_num / getMaxTime(data[\"timestamp\"]) \n",
    "print(\"平均IOPS：\",AVG_IOPS)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "a61c830a",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|███████████████████████████████████████████████████████████████████████████████| 29/29 [1:16:15<00:00, 157.79s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y轴请求数目数组: [28964, 164026, 165254, 97494, 90685, 2073, 101442, 17859, 6748, 58563, 103914, 71301, 12907, 121863, 23961, 2666, 56404, 24796, 48384, 80308, 52791, 63946, 201984, 45475, 14776, 93991, 172781, 83841, 23886]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'request_amount')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 任务4：负载的IOPS随时间变化示意图？（画图显示结果，参考示列3）？\n",
    "\n",
    "# per second \n",
    "def cnt_request_per_delta(beginS,deltaSecond=1): \n",
    "    cnt = 0\n",
    "    for occur_time in data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    return cnt\n",
    "\n",
    "y_axis_request_cnt = []\n",
    "for i in tqdm(range(len(x_axis))): \n",
    "    y_axis_request_cnt.append(cnt_request_per_delta(x_axis[i]))\n",
    "print(\"y轴请求数目数组:\",y_axis_request_cnt)\n",
    "\n",
    "plt.plot(x_axis, y_axis_request_cnt, marker='o', markersize=3)  # 绘制折线图，添加数据点，设置点的大小\n",
    "plt.title(\"numbers of I/O request per second\")\n",
    "plt.xlabel(\"time_stamp\")\n",
    "plt.ylabel(\"request_amount\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "878667d0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████| 19335544/19335544 [01:40<00:00, 193065.88it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x_axis_per_hour: [0, 1]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 50%|██████████████████████████████████████████                                          | 1/2 [01:37<01:37, 97.16s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_axis_request_cnt_per_hour: [19335544] hour: 0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████████████████| 2/2 [03:11<00:00, 95.74s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_axis_request_cnt_per_hour: [19335544, 0] hour: 1\n",
      "y轴请求数目数组: [19335544, 0]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# per hour\n",
    "def generate_time_Xaxis_per_hour(deltaHour=1): #interval:区间的个数\n",
    "    endS = math.ceil(getMaxTime(data[\"timestamp\"])/3600) #endSecond (已向上取整)\n",
    "    X_axis = [i for i in range(endS+1)]\n",
    "    #print(\"X_axis\",X_axis)\n",
    "    return X_axis\n",
    "x_axis_per_hour = generate_time_Xaxis_per_hour() \n",
    "print(\"x_axis_per_hour:\",x_axis_per_hour)\n",
    "\n",
    "y_axis_request_cnt_per_hour = []\n",
    "for i in tqdm(range(len(x_axis_per_hour))): \n",
    "    y_axis_request_cnt_per_hour.append(cnt_request_per_delta(x_axis_per_hour[i]*3600,3600)) #求出各个小时内请求的数量\n",
    "    print(\"y_axis_request_cnt_per_hour:\",y_axis_request_cnt_per_hour,\"hour:\",x_axis_per_hour[i])\n",
    "print(\"y轴请求数目数组:\",y_axis_request_cnt_per_hour)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "eaf67510",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████| 19335544/19335544 [00:13<00:00, 1468987.95it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        24       16        8    112  0      32      40     64     88   224  \\\n",
      "0  1710846  9246802  3935757  27742  1  308695  173234  89827  45095  4526   \n",
      "\n",
      "   ...  1320  2024  656  520  1480  640  1288  552  1224  2016  \n",
      "0  ...    12     4    8    4     4    4     4    4     4     4  \n",
      "\n",
      "[1 rows x 237 columns]\n",
      "平均请求大小为: 42.18136339996433\n"
     ]
    }
   ],
   "source": [
    "y_axis_IOsize_frequency = {}\n",
    "for item in tqdm(data[\"IO_size\"]):\n",
    "    if y_axis_IOsize_frequency.get(item)==None:\n",
    "        temp = {str(item):[1]} #全部转为字符串  使用list是为了便于转为datafrmae\n",
    "        y_axis_IOsize_frequency.update(temp)\n",
    "    else:\n",
    "        (y_axis_IOsize_frequency[str(item)])[0]+=1\n",
    "        \n",
    "# print(y_axis_IOsize_frequency.keys())\n",
    "\n",
    "IO_SIZE_TABLE = {\n",
    "    \"请求大小\":list(y_axis_IOsize_frequency.keys()),\n",
    "    \"出现次数\":list(y_axis_IOsize_frequency.values())\n",
    "}\n",
    "IO_SIZE_TABLE = pd.DataFrame(y_axis_IOsize_frequency)\n",
    "print(IO_SIZE_TABLE)\n",
    "\n",
    "\n",
    "#load3_request_num #总的请求数目\n",
    "IO_SIZE_SUM = 0\n",
    "for key,value in y_axis_IOsize_frequency.items():\n",
    "    IO_SIZE_SUM+=eval(key)*value[0]\n",
    "AVG_IO_SIZE = IO_SIZE_SUM / load3_request_num\n",
    "print(\"平均请求大小为:\",AVG_IO_SIZE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e9d237f9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6bef0e7d",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
